home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 3082 / 3082.xpi / chrome / content / undo.js < prev   
Text File  |  2010-01-14  |  10KB  |  222 lines

  1. var undoClosedButt = {
  2.   populateUndoSubmenu: function(aNode) {
  3.     // remove existing menu items
  4.     while (aNode.hasChildNodes())
  5.       aNode.removeChild(aNode.firstChild);
  6.  
  7.     // get closed-tabs from nsSessionStore
  8.     var ss = Cc["@mozilla.org/browser/sessionstore;1"].
  9.               getService(Ci.nsISessionStore);
  10.  
  11.     // return if no restorable tabs
  12.     var noHistory = document.getElementById("bundle_undoclosedtabsbutton")
  13.                       .getString("noHistory");
  14.     if (ss.getClosedTabCount(window) == 0) {
  15.       aNode.appendChild(document.createElement("menuitem"));
  16.       aNode.firstChild.setAttribute("label", noHistory);
  17.       aNode.firstChild.setAttribute("disabled", "true");
  18.       return;
  19.     }
  20.  
  21.     // populate menu
  22.     var undoItems = eval("(" + ss.getClosedTabData(window) + ")");
  23.     for(var i = 0; i < undoItems.length; i++) {
  24.       var m = aNode.appendChild(document.createElement("menuitem"));
  25.       m.setAttribute("class", "menuitem-iconic bookmark-item");
  26.       m.setAttribute("label", undoItems[i].title);
  27.       m.setAttribute("value", i);
  28.       m.setAttribute("oncommand", "undoCloseTab(" + i + ");");
  29.       m.setAttribute("image", "moz-anno:favicon:" + undoItems[i].image);
  30.     
  31.     
  32.     // Set the targetURI attribute so it will be shown in tooltip and statusbar.
  33.     // SessionStore uses one-based indexes, so we need to normalize them.
  34.     let tabData = undoItems[i].state;
  35.     let activeIndex = (tabData.index || tabData.entries.length) - 1;
  36.     if (activeIndex >= 0 && tabData.entries[activeIndex])
  37.       m.setAttribute("targetURI", tabData.entries[activeIndex].url);
  38.     }
  39.     
  40.     // add option to clear closed tabs list
  41.     aNode.appendChild(document.createElement("menuseparator"));
  42.     
  43.     var clearHistoryLabel = document.getElementById("bundle_undoclosedtabsbutton")
  44.                               .getString("clearHistory");
  45.     var mItem = aNode.appendChild(document.createElement("menuitem"));
  46.     mItem.setAttribute("oncommand", "undoClosedButt.clearClosedTabsHistory()");
  47.     mItem.setAttribute("label", clearHistoryLabel);
  48.     mItem.tooltipText = mItem.label;
  49.     
  50.     // "Restore All Tabs"
  51.     var strings = gNavigatorBundle;
  52.     m = aNode.appendChild(document.createElement("menuitem"));
  53.     m.setAttribute("label", strings.getString("menuRestoreAllTabs.label"));
  54.     m.setAttribute("accesskey", strings.getString("menuRestoreAllTabs.accesskey"));
  55.     m.addEventListener("command", function() {
  56.       for (var i = 0; i < undoItems.length; i++)
  57.         undoCloseTab();
  58.     }, false);
  59.  
  60.   },
  61.  
  62.   clearClosedTabsHistory: function() {
  63.     try {
  64.       var maxUndo = gPrefService.getIntPref("browser.sessionstore.max_tabs_undo");
  65.     } catch(ex) {
  66.       var maxUndo = 10;
  67.       gPrefService.setIntPref("browser.sessionstore.max_tabs_undo", maxUndo);
  68.     }
  69.     //clear close tabs history
  70.     gPrefService.setIntPref("browser.sessionstore.max_tabs_undo", 0);
  71.  
  72.     //restore maximum undo history pref
  73.     gPrefService.setIntPref("browser.sessionstore.max_tabs_undo", maxUndo);
  74.  
  75.  
  76.     // update button disabled on TabOpen & TabClose
  77.     gBrowser.addEventListener("TabOpen",undoClosedButt.tabOpenClose,false);
  78.     gBrowser.addEventListener("TabClose",undoClosedButt.tabOpenClose,false);
  79.     gBrowser.addEventListener("TabOpen",undoClosedButt.tabbarOpenClose,false);
  80.     gBrowser.addEventListener("TabClose",undoClosedButt.tabbarOpenClose,false);
  81.         gBrowser.addEventListener("TabOpen",undoClosedButt.contextEntryOpenClose,false);
  82.     gBrowser.addEventListener("TabClose",undoClosedButt.contextEntryOpenClose,false);
  83.     // 1 second after browser window load
  84.     setTimeout("undoClosedButt.tabOpenClose()", 250);
  85.     setTimeout("undoClosedButt.tabbarOpenClose()", 250); 
  86.     setTimeout("undoClosedButt.contextEntryOpenClose()", 250);
  87.  
  88.   },
  89.  
  90.   rightClickMenu: function(aNode, aEvent) {
  91.     if(aEvent.button == 2) {
  92.       var popup = document.getElementById("undoclosedtabsbutton-menu");
  93.       var x = aNode.boxObject.x;
  94.       var y = aNode.boxObject.y + aNode.boxObject.height;
  95.       document.popupNode = aNode;
  96.       popup.showPopup(aNode, x, y, "popup", null, null);
  97.     }
  98.   },
  99.  
  100.   restartFX: function() {
  101.     var appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"]
  102.                                .getService(Components.interfaces.nsIAppStartup);
  103.     appStartup.quit(appStartup.eForceQuit | appStartup.eRestart);  
  104.   },
  105.  
  106.   //Disable the toolbar button when no tabs to unclose
  107.   tabOpenClose: function() {
  108.     var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
  109.                                  getService(Components.interfaces.nsISessionStore);
  110.     var button = document.getElementById("undoclosedtabsbutton-toolbar-button") ;
  111.     var count = ss.getClosedTabCount(window);
  112.     // has closed tabs
  113.     if (button && count>0)
  114.        button.removeAttribute('disabled');
  115.     // no closed tabs
  116.     else if (button && count<1)
  117.        button.setAttribute("disabled", "true");
  118.   },
  119.  
  120.   //Disable the tabbar button when no tabs to unclose
  121.   tabbarOpenClose: function() {
  122.     var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
  123.                                  getService(Components.interfaces.nsISessionStore);
  124.     var tabcontainer = document.getAnonymousElementByAttribute(gBrowser, "anonid", "tabcontainer");
  125.     var tabbarbutton = document.getAnonymousElementByAttribute(tabcontainer, "class", "uctb-tab-button");
  126.     var count = ss.getClosedTabCount(window);
  127.     // has closed tabs
  128.     if (tabcontainer, tabbarbutton && count>0)
  129.        tabbarbutton.removeAttribute('disabled');
  130.     // no closed tabs
  131.     else if (tabcontainer, tabbarbutton && count<1)
  132.        tabbarbutton.setAttribute("disabled", "true");
  133.   },
  134.   
  135.     //Disable the context-menu entry when no tabs to unclose
  136.   contextEntryOpenClose: function() {
  137.     var ss = Components.classes["@mozilla.org/browser/sessionstore;1"].
  138.                                  getService(Components.interfaces.nsISessionStore);
  139.     var contextEntry = document.getElementById("uctb-contextentry") ;
  140.     var count = ss.getClosedTabCount(window);
  141.     // has closed tabs
  142.     if (contextEntry && count>0)
  143.        contextEntry.removeAttribute('disabled');
  144.     // no closed tabs
  145.     else if (contextEntry && count<1)
  146.        contextEntry.setAttribute("disabled", "true");
  147.   }
  148.  
  149. }
  150.  
  151. window.addEventListener("load", UCT_init, false);
  152. function UCT_init() {
  153.    document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", onUCTBPopup, false);
  154.  
  155.    // Add attribute to nsSessionStore persistTabAttribute after delay
  156.    // we call this after nsSessionStore.init
  157.    window.setTimeout(UCT_ss_persist, 2000, false);
  158.  
  159.    // add tab image and url in statustext to closed tab list
  160.    // add menu entry to clear the closed tabs list
  161.    eval("HistoryMenu.populateUndoSubmenu ="+HistoryMenu.populateUndoSubmenu.toString().replace(
  162.       'var m = undoPopup.appendChild(document.createElement("menuitem"));',
  163.       '$& \ m.setAttribute("class", "menuitem-iconic bookmark-item"); \
  164.        var tabData = undoItems[i].state; \
  165.        var activeIndex = (tabData.index || tabData.entries.length) - 1; \
  166.        m.setAttribute("statustext", tabData.entries[activeIndex].url); \
  167.        m.setAttribute("image", "moz-anno:favicon:" + undoItems[i].image);'
  168.    ).replace(
  169.       'undoPopup.appendChild(document.createElement("menuseparator"));',
  170.       '$& \ var clearHistoryLabel = document.getElementById("bundle_undoclosedtabsbutton").getString("clearHistory");\
  171.        var mItem = undoPopup.appendChild(document.createElement("menuitem")); \
  172.        mItem.setAttribute("oncommand", "undoClosedButt.clearClosedTabsHistory()"); \
  173.        mItem.setAttribute("label", clearHistoryLabel);'
  174.    ));
  175.  
  176.     // update button disabled on TabOpen & TabClose
  177.     gBrowser.addEventListener("TabOpen",undoClosedButt.tabOpenClose,false);
  178.     gBrowser.addEventListener("TabClose",undoClosedButt.tabOpenClose,false);
  179.     gBrowser.addEventListener("TabOpen",undoClosedButt.tabbarOpenClose,false);
  180.     gBrowser.addEventListener("TabClose",undoClosedButt.tabbarOpenClose,false);
  181.     gBrowser.addEventListener("TabOpen",undoClosedButt.contextEntryOpenClose,false);
  182.     gBrowser.addEventListener("TabClose",undoClosedButt.contextEntryOpenClose,false);
  183.     // 1 second after browser window load
  184.     setTimeout("undoClosedButt.tabOpenClose()", 250);
  185.     setTimeout("undoClosedButt.tabbarOpenClose()", 250); 
  186.     setTimeout("undoClosedButt.contextEntryOpenClose()", 250);
  187.  
  188. }
  189.  
  190. function UCT_ss_persist() {
  191.    if (!window.__SSi) // nsISessionStore not initialized
  192.      return;
  193.  
  194.    var ss = Cc["@mozilla.org/browser/sessionstore;1"].
  195.          getService(Ci.nsISessionStore);
  196.    ss.persistTabAttribute("image");
  197. }
  198.  
  199. function onUCTBPopup() {
  200.   var someConditions = !(gContextMenu.isContentSelected ||
  201.                           gContextMenu.onLink ||
  202.                           gContextMenu.onImage ||
  203.                           gContextMenu.onTextInput);
  204.  
  205.   gContextMenu.showItem("uctb-contextentry", someConditions);
  206.   gContextMenu.showItem("uctb-separator", someConditions);
  207. }
  208.  
  209. function canQuitApplication() {
  210.   var os=Components.classes["@mozilla.org/observer-service;1"]
  211.    .getService(Components.interfaces.nsIObserverService)
  212.  if(!os)return true
  213.    try{
  214.   var cancelQuit=Components.classes["@mozilla.org/supports-PRBool;1"]
  215.    .createInstance(Components.interfaces.nsISupportsPRBool)
  216.    os.notifyObservers(cancelQuit,"quit-application-requested",null)
  217.  if(cancelQuit.data)
  218.    return false}
  219.      catch(ex){}
  220.      os.notifyObservers(null,"quit-application-granted",null)
  221.    return true
  222. }